package com.jiang.daily.Q2131;

/**
 * @author Jiang
 * @version 1.0
 * @date 2025/05/27 15:51
 */
class Solution {
    public int longestPalindrome(String[] words) {
        int[][] cnt = new int[26][26];
        for (String word : words) {
            cnt[word.charAt(0) - 'a'][word.charAt(1) - 'a']++;
        }
        int res = 0, same = 0;
        for (int i = 0; i < 26; i++) {
            res += cnt[i][i] - cnt[i][i] % 2;
            same |= cnt[i][i] % 2;
            for (int j = i + 1; j < 26; j++) {
                res += Math.min(cnt[i][j], cnt[j][i]) * 2;
            }
        }
        return (res + same) * 2;
    }

    // public int longestPalindrome(String[] words) {
    //     Map<String, Integer> map = new HashMap<>();
    //     int res = 0;
    //     for (String word : words) {
    //         String r_word = reverse(word);
    //         Integer r_cnt = map.get(reverse(word));
    //         if (r_cnt != null && r_cnt > 0) {
    //             res += 4;
    //             map.put(r_word, r_cnt - 1);
    //         } else {
    //             map.put(word, map.getOrDefault(word, 0) + 1);
    //         }
    //     }
    //     for (String word : map.keySet()) {
    //         if (map.get(word) > 0 && word.charAt(0) == word.charAt(1)) {
    //             res += 2;
    //             break;
    //         }
    //     }
    //     return res;
    // }

    private String reverse(String word) {
        char[] chars = word.toCharArray();
        char temp = chars[0];
        chars[0] = chars[1];
        chars[1] = temp;
        return new String(chars);
    }
}
